/**
 * ____________________ *
 *  ____ ____ ____ _  _ *
 *  |___ [__] |--< |\/| *
 * ____________________ *
 *
 * THE CORM PROJECT
 *
 * This file may only be used in accordance with the
 * terms of the Academic Free License ("AFL") v. 3.0,
 * as published by the Open Software Initiative.  A
 * copy of this license is provided in this source
 * release, and may be viewed online at:
 *
 * (http://www.opensource.org/licenses/afl-3.0.php)
 */
package org.eremite.corm.product;

import org.jscience.physics.amount.Amount;

import java.util.Set;
import java.util.Map;
import java.util.HashMap;

/**
 * <p>The PackageType archetype specifies a set of component
 * ProductTypes that make up a PackageInstance.  A PackageType
 * is a kind of ProductType.</p>
 *
 * <p>The rules governing the creation of PackageTypes are
 * not contained inside of this class.  We recommend using
 * an outboard rule engine such as JESS in order to enforce
 * package constraints.</p>
 *
 * <p>Your formulation of PackageTypes should be driven by the
 * following requirements and constraints:</p>
 * <dl>
 *   <dt>Customer requirements</dt>
 *   <dd>e.g., the combination of noodles and a spice packet in
 *       a package offer</dd>
 *   <dt>Business requirements</dt>
 *   <dd>e.g., the need to sell more of a specific ProductType</dd>
 *   <dt>Legal constraints</dt>
 *   <dd>e.g., the need to always combine two ProductTypes</dd>
 *   <dt>Supply constraints</dt>
 *   <dd>e.g., insufficient ProductType availability to market the package</dd>
 *   <dt>Financial constraints</dt>
 *   <dd>e.g., the need to offer the package at a competetive price</dd>
 *   <dt>Pdocut combination constraints</dt>
 *   <dd>e.g., possible incompaibilities among the proposed ProductTypes</dd>
 * </dl>
 */
public class PackageType extends ProductType {
    private Set<Amount<ProductType>> components;

    public Set<Amount<ProductType>> getComponents() {
        return components;
    }

    public void setComponents(Set<Amount<ProductType>> components) {
        this.components = components;
    }
}
